package com.jt.controller;

import com.jt.pojo.User;
import com.jt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/user")
@CrossOrigin
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/findAll")
    public List<User> findAll(){
        return userService.findAll();
    }

    @GetMapping("getUserById")  //只允许get请求类型访问
//    @PostMapping("")
//    @PutMapping("")
//    @DeleteMapping("")
    public User getUserById(Integer id){
        return userService.getUserById(id);
    }

    /**
     * 业务: 根据name/sex查询数据
     * 请求类型: get请求
     * 请求路径: http://localhost:8090/getUserByNS
     * 请求参数: user对象方式
     * 返回值结果: List<User>
     * 数据?name=xx&sex=xx
     */
    @GetMapping("getUserByNS")
    public List<User> getUserByNS(User user){

        return userService.getUserByNS(user);
    }

    /**
     * 业务: 模糊查询name="%xxx%"数据
     * 请求类型: get请求
     * 请求路径: http://localhost:8090/user/君
     * 请求参数: name属性
     * 返回值结果: List<User>
     * RestFul参数接收:
     *      1.多个参数使用/分割
     *      2.参数使用{}形式包裹
     *      3.接参使用特定的注解 @PathVariable
     */
    @GetMapping("/user/{name}")
    public List<User> getUserByName(@PathVariable String name){

        return userService.getUserByName(name);
    }

    //简化:restFul风格2 查询name="精" sex="女"
    //如果参数有多个,则可以使用对象封装. 要求参数名称与属性一致.
    @GetMapping("/user/{name}/{sex}")
    public List<User> getUserBySex(User user){

        return null;
    }

    /**
     * 实现数据删除
     * URL: http://localhost:8090/deleteUserByName
     * 参数: 对象封装
     * 返回值: 删除数据成功
     */
    @DeleteMapping("/deleteUserByName")
    public String deleteUserByName(User user){

        userService.deleteUserByName(user);
        return "删除数据成功!!!";
    }

    /**
     * URL: http://localhost:8090/user/宵夜吃什么/女
     * 参数: 对象封装
     * 返回值: "删除成功!!"
     */
    @DeleteMapping("/user/{name}/{sex}")
    public String deleteUser(User user){
        //业务功能类似,所以可以简化调用之前的方法.
        userService.deleteUserByName(user);
        return "删除数据成功!!!";
    }

}

